HTMLify

script.js
Views: 44 | Author: cody
var modal = document.getElementById('myModal');
var grid = new Array(3);
grid[0] = new Array(3);
grid[1] = new Array(3);
grid[2] = new Array(3);
var player = 0;
var gameWon = 0;
var numberMap = new Map();

//Helper function to fill Map data structure
function fillMap()
{
numberMap.set('one',1);
numberMap.set('two',2);
numberMap.set('three',3);
numberMap.set('four',4);
numberMap.set('five',5);
numberMap.set('six',6);
numberMap.set('seven',7);
numberMap.set('eight',8);
numberMap.set('nine',9);
}
fillMap();

//Function that maps a number to its place in the grid
//For example F(1) -> (0,0) , F(2) -> (0,1) , F(3) -> (0,2) , F(4) -> (1,0) , F(5) -> (1,1) , ... 
function evaluateMapping(squareNumber){
  if(squareNumber >= 1 && squareNumber <=3){
    return [0 , squareNumber - 1];
  }
  if(squareNumber >= 4 && squareNumber <=6){
    return [1 , squareNumber - 4];
  }
  if(squareNumber >= 7 && squareNumber <=9){
    return [2 , squareNumber - 7];
  }
}

//Utility function that handles Click on the Square
function handleSquareClick(squareVal){
  let x , y , squareNumber;
  squareNumber = numberMap.get(squareVal);
  [x,y] = evaluateMapping(squareNumber); 
  if (checkLegalMove(x, y) == true) {
    if (player == 0) {
      console.log('X turn');
      $(`#square_${squareVal}_text`).html("X");
      grid[x][y] = 'X';
      if (checkWin(1) == true) {
        endgame(1);
      }
    } else {
      console.log('0 turn ');
      $(`#square_${squareVal}_text`).html("O");
      grid[x][y] = 'O';
      if (checkWin(2) == true) {
        endgame(2);
      }
    }
    //Switch player turns
    player = 1 - player;
  }
}

$("#square_one").click(function() { handleSquareClick("one")});
$("#square_two").click(function() { handleSquareClick("two")});
$("#square_three").click(function(){ handleSquareClick("three") } );
$("#square_four").click(function(){ handleSquareClick("four")});
$("#square_five").click(function() { handleSquareClick("five") } );
$("#square_six").click(function() { handleSquareClick("six")});
$("#square_seven").click(function(){ handleSquareClick("seven") } );
$("#square_eight").click(function(){ handleSquareClick("eight")});
$("#square_nine").click(function (){ handleSquareClick("nine")});

function checkWin(playerNum) {
  //check horizontal
  for (i = 0; i < 3; i++) {
    if ((grid[i][0] == grid[i][1] && grid[i][1] == grid[i][2]) &&  grid[i][0] != undefined && grid[i][1] != undefined && grid[i][2] != undefined) {
      console.log("horizontal won");
      return true;
    }
  }

  //check vertical
  for (i = 0; i < 3; i++) {
     console.log("i is: " + i);
     console.log("grid[" + i + "][0] is " + grid[i][0]);
     console.log("grid[" + i + "][1] is " + grid[i][1]);
     console.log("grid[" + i + "][2] is " + grid[i][2]);
    if ((grid[0][i] == grid[1][i] && grid[1][i] == grid[2][i]) && grid[0][i] != undefined && grid[1][i] != undefined && grid[2][i] != undefined) {
      console.log("vertical won");
      return true;
    }
  }

  //check diagonal
  if (((grid[0][0] == grid[1][1] && grid[1][1] == grid[2][2]) || (grid[0][2] == grid[1][1] && grid[1][1] == grid[2][0])) && grid[1][1] !== undefined) {
     console.log("diagonal won");
    return true;
  }

  var tieGame = true;
  for (var i = 0; i < 3; i++) {
    for (var x = 0; x < 3; x++) {
      if (grid[i][x] == null && grid[i][x] == undefined) {
        tieGame = false;
      } 
    }
  }

  if (tieGame == true) {
    endgame(0);
  }

  return false;
}

function checkLegalMove(row, column) {
  console.log(grid[row][column]);
  if (grid[row][column] !== undefined && grid[row][column] !== null) {
    return false;
  } else {
    return true;
  }
}

function endgame(num) {
  if (num == 0) {
    $(".modal_text").html("Tie game!");
    $("#myModal").css("display", "block");
  }
  if (num == 1) {
    $(".modal_text").html("Player X Wins!");
    $("#myModal").css("display", "block");
  }
  if (num == 2) {
    $(".modal_text").html("Player O Wins!");
    $("#myModal").css("display", "block");
  }
  //Blurs the background when the modal pops up
  $("table").css("filter","blur(8px)");
}

$("#restartBtn").click(function(){
    grid = new Array(3);
    grid[0] = new Array(3);
    grid[1] = new Array(3);
    grid[2] = new Array(3);
    player = 0;
    gameWon = 0;
    $("#square_one_text").html("");
    $("#square_two_text").html("");
    $("#square_three_text").html("");
    $("#square_four_text").html("");
    $("#square_five_text").html("");
    $("#square_six_text").html("");
    $("#square_seven_text").html("");
    $("#square_eight_text").html("");
    $("#square_nine_text").html("");
    modal.style.display = "none";
    //remove filter property after game reset
    $("table").css("filter","")

});

Comments